package Modelo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import javax.swing.JOptionPane;

public class ClienteModelo{
        ConexionModelo conexion=new ConexionModelo();
	private transient Connection con;
	ResultSet rs;    
	
//linkedlist clase de java para generar listas
//preparedstatement permite prepara el estado recibir la informacion de la base de datos
//rsultset el resultado
/**
 * tipo=parametros de consulta clientes, tipo:0.Codigo, 1.Cedula, 2.Nombre, 3.Establecimiento
 * @param consulta
 * @param tipo
 * @return
 * @throws SQLException
 */
 public LinkedList consultaClientesTabla(String consulta,int tipo)throws SQLException{
    if( !conexion.isConnect() ){
          con=conexion.connect();
           while(!conexion.isConnect()){
                conexion.connect();
           }
     }
	LinkedList listaClie=new LinkedList();
	PreparedStatement pstmt=null;
	ResultSet rs=null;
  	try{
            if (consulta.equals(""))
  		pstmt=con.prepareStatement("select * from Cliente");
            else
                if (tipo==0)
                    pstmt=con.prepareStatement("select * from Cliente where codigo like '%"+ consulta + "%'");
                else if(tipo == 1)
                    pstmt=con.prepareStatement("select * from Cliente where cedula like '%"+ consulta + "%'");
                else if(tipo == 2)
                    pstmt=con.prepareStatement("select * from Cliente where nombre like '%"+ consulta + "%'");
                else
                    pstmt=con.prepareStatement("select * from Cliente where establecimiento like '%"+ consulta + "%'");

  		rs=pstmt.executeQuery();                
  		while(rs.next()){
  			listaClie.add(Cliente.load(rs));
  		}
           
  	}finally{
 		if(rs!=null){
			rs.close();
		}
		if(pstmt!=null){
			pstmt.close();
			pstmt=null;
		}
	}
        conexion.disconnect();
	return listaClie;
 }

 /**
  * insertar datos a la base de datos
  * @param Object clie
  * @throws SQLException
  */
 public void setNuevoCliente(Cliente clie) throws SQLException {
       if( !conexion.isConnect() ){
          con=conexion.connect();
           while(!conexion.isConnect()){
                conexion.connect();
           }
     }

        PreparedStatement pstmt=null;
        try{
                pstmt=con.prepareStatement("insert into cliente values(?,?,?,?,?,?,?,?)");
                pstmt.setString(1,  clie.getCodigo());
                pstmt.setString(2,  clie.getCedula());
                pstmt.setString(3,  clie.getNombre());
		pstmt.setString(4,  clie.getApellido());
                pstmt.setString(5,  clie.getTelefono());
                pstmt.setString(6,  clie.getEstablecimiento());
                pstmt.setString(7,  clie.getDireccion());
                pstmt.setBoolean(8,  clie.getEstado());
		pstmt.executeUpdate();
        }finally{
               if( pstmt!=null )
                  pstmt.close();
        }
        conexion.disconnect();
    }

 /**
  * Actualizar donde consulta cedula o codigo y dato es el valor a cambiar
  */
  public void actualizarCliente(Cliente clie,String consulta) throws SQLException   {// insertar datos a la base de datos
        if( !conexion.isConnect() ){
          con=conexion.connect();
           while(!conexion.isConnect()){
                conexion.connect();
           }
     }

        PreparedStatement pstmt=    null;
        try{

                pstmt=con.prepareStatement("update cliente set "
                        + "cedula='" + clie.getCedula() + "',"
                        + "nombre='" + clie.getNombre() + "',"
                        + "apellido='" + clie.getApellido() + "',"
                        + "telefono='" + clie.getTelefono() + "', "
                        + "establecimiento='" +  clie.getEstablecimiento() + "',"
                        + "direccion='" + clie.getDireccion()+ "',"
                        + "estado=" + clie.getEstado()
                        + " where codigo='" + consulta +"'");
		pstmt.executeUpdate();

        }finally{
               if( pstmt!=null )
                  pstmt.close();
        }
        conexion.disconnect();
    }

/**
 * consulta cliente por codigo
 * @param codigo
 * @return String[]
 * @throws SQLException
 */
  public Cliente consultaClienteCodigo(String consulta) throws SQLException{
     if( !conexion.isConnect() ){
          con=conexion.connect();
           while(!conexion.isConnect()){
                conexion.connect();
           }
     }

      Cliente cliente=new Cliente();
     
      PreparedStatement pstmt=null;
	ResultSet rs=null;
  	try{
            pstmt=con.prepareStatement("select * from Cliente where codigo='"+ consulta + "'");//probando
            rs=pstmt.executeQuery();
            
            while(rs.next()){
                cliente=Cliente.load(rs);
            }
  	}finally{
 		if(rs!=null){
			rs.close();
		}
		if(pstmt!=null){
			pstmt.close();
			pstmt=null;
		}
	}
        conexion.disconnect();
        return cliente;
  }

  /**
 * consulta cliente por cedula
 * @param codigo
 * @return String[]
 * @throws SQLException
 */
  public Cliente consultaClienteCedula(String consulta) throws SQLException{
     if( !conexion.isConnect() ){
          con=conexion.connect();
           while(!conexion.isConnect()){
                conexion.connect();
           }
     }

      Cliente cliente=new Cliente();
      
      PreparedStatement pstmt=null;
	ResultSet rs=null;
  	try{
            pstmt=con.prepareStatement("select * from Cliente where cedula='"+ consulta + "'");
            rs=pstmt.executeQuery();

            while(rs.next()){
                cliente=Cliente.load(rs);
            }
  	}finally{
 		if(rs!=null){
			rs.close();
		}
		if(pstmt!=null){
			pstmt.close();
			pstmt=null;
		}
	}

        conexion.disconnect();
        return cliente;
  }

  

}// fin clase model

